#!/bin/bash


sleep_time=20 # intervals second for daemon to sleep
#defines

#Placeholder
SYSFILE=sistemas
LOGGER_EXE="perl ${BINDIR}Logger.pl"

cod_se=666
comando_log="detectaW5.sh"

iniciar_buscarW5 (){
	pid_buscar=$(pidof -x buscarW5.sh)
	if [ "${pid_buscar}1" != "1" ]; then
		## Proceso existe => Alerta => Termina
		$LOGGER_EXE -m="El proceso buscarW5 ya esta corriendo.PID: ${pid_buscar}" -a -l="$comando_log" # buscar is running
	else
		# Execute BuscarW5.sh
		if ! [ -a "${BINDIR}buscarW5.sh" ]; then	#Check existence
			$LOGGER_EXE -e -c="100"	# Source not found
		else
			if ! [ -x "${BINDIR}buscarW5.sh" ]; then	#Check permissions
				$LOGGER_EXE -e -c="101"	# Source Lack of permissions
			else
				${BINDIR}buscarW5.sh 2>&1 & # ejecutar en paralelo

				#buscar_mens=$(${BINDIR}buscarW5.sh 2>&1 &) # ejecutar en paralelo
				# if [ -z $? ]; then
				# 	pid_buscar=pidof -x buscarW5.sh
				# 	$LOGGER_EXE -m="El proceso buscarW5 se inicio correctamente, PID: ${pid_buscar}" -i -c="619"
				# else
				# 	$LOGGER_EXE -m="No se pudo iniciar buscarW5: \"$buscar_mens\"." -a -c=$cod_se -l="$comando_log"
				# fi
			fi
		fi
	fi
}

return_value=0
mover_error=""
cod_log=111
$LOGGER_EXE -m="Inicio de ejecucion comando detectaW5." -i -l=${comando_log}

i=0
while :
do
	if [ $i != 0 ]
	then
		sleep $sleep_time
	else
		i=1
	fi

	#Check if ARRIDIR directory is empty
	if [ $(ls $ARRIDIR | wc -l) == "0" ]
	then
		echo "no files in ARRIDIR"
		$LOGGER_EXE -m="No se encontraron archivos en ARRIDIR." -i -l=${comando_log}
	fi

	for FILE in `find $ARRIDIR -type f -exec basename "{}" \; | grep ^[a-Z][^_]*_[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$`; do
		# Move all files that match
		# Now matches string_nnnn-nn-nn

		# Get File Date
		fileDate=$(basename $FILE | cut -d "_" -f2)	#YYYY-mm-dd
		if [[  $fileDate != [0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] ]];
		then
			# El mover se encarga de loguear mensajes
			moverW5 "${ARRIDIR}${FILE}" "$RECHDIR" detectaW5.sh 2>&1
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha invalida." -a -l=${comando_log}
			continue
		#else  MALL!!
		#	$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha invalida." -a -l=${comando_log}
		fi

		filedateSec=$(date -d $fileDate +%s) #seconds from 1970-01-01
		
		#Now
		Now_tmp=$(date +%F)
		NowSec=$(date -d $Now_tmp +%s)
		
		# FileDate <= NOW
		if [ $filedateSec -gt $NowSec ];
		then
			moverW5 "${ARRIDIR}${FILE}" "$RECHDIR" detectaW5.sh 2>&1
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha posterior a fecha actual." -a -l=${comando_log}
			continue
		fi

		### Check against MAESTRO
		# File ID
		fileId=$(basename $FILE | cut -d "_" -f1)

		# Veo si existe en el archivo maestro
		if [ $(grep -c ^$fileId,[^,][^,]*,[^,][^,]*,[^,]*$ $MAEDIR/$SYSFILE) == 0 ]
		then
			moverW5 "${ARRIDIR}${FILE}" "$RECHDIR" detectaW5.sh 2>&1
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Sistema inexistente." -a -l=${comando_log}	
			continue
		fi

		# Ver que el archivo maestro se recorre hasta la primera aparición del id (luego break)
		# Match SIS_ID,?*,?*,* || (sis_baja puede ser nula)
		for SIS in `grep ^$fileId,[^,][^,]*,[^,][^,]*,[^,]*$ ${MAEDIR}$SYSFILE`; do

			sis_id=$(echo $SIS | cut -f1 -d ",") # useless
			sis_name=$(echo $SIS | cut -f2 -d ",") # useless
			tmp_sis_alta=$(echo $SIS | cut -f3 -d ",") 
			sis_alta=$(date -d $tmp_sis_alta +%s)
			tmp_sis_baja=$(echo $SIS | cut -f4 -d ",")
			sis_baja=""
			if [ "$tmp_sis_baja" != "" ]; then
				sis_baja=$(date -d $tmp_sis_baja +%s)
			fi
		done
		
		# Date < SIS_ALTA
		if [ $filedateSec -lt $sis_alta ]; then
			moverW5 "${ARRIDIR}$FILE" "$RECHDIR" detectaW5.sh 2>&1
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha anterior a fecha de alta." -a -l=${comando_log}	
			continue
		fi

		# Date > SIS_BAJA
		if [ "${filedateSec}1" -gt "${sis_baja}1" ]
		then
			moverW5 "${ARRIDIR}$FILE" "$RECHDIR" detectaW5.sh 2>&1
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha posterior a fecha baja del sistema." -a -l=${comando_log}	
			continue
		else # no hubo errores. Archivo valido!
			moverW5 "${ARRIDIR}$FILE" "$ACEPDIR" detectaW5.sh 2>&1
			$LOGGER_EXE -m="Archivo \"$FILE\" aceptado."  -i -l=${comando_log}
			continue
		fi
	done

	for FILE in `find $ARRIDIR` # all invalid files left
	do
		[[ -d $FILE ]] && continue
		moverW5 "$FILE" "$RECHDIR" detectaW5.sh 2>&1
		if [ -f $FILE ]; then
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Formato de nombre invalido."  -a -l=${comando_log}
		else
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Formato de archivo invalido. No es un archivo regular."  -a -l=${comando_log}
		fi
	done

	# Check if ACEPDIR have files
	if [ $(ls $ACEPDIR | wc -l) -gt 0 ]; then
		$LOGGER_EXE -m="El directorio de archivos aceptados \"$ACEPDIR\" no esta vacio. Se ejecuta el comando \"buscarW5\".." -i -l="$comando_log"
		# Invoque BuscarW5
		iniciar_buscarW5
	fi
done